/* 
 * File:   ReaderLabs.cpp
 * Author: jorgeorm
 * 
 * Created on 16 de septiembre de 2011, 04:31 PM
 */

#include "ReaderLabs.h"
#include <cstdio>
#include <iostream>
#include <string.h>
#include <cstdarg>
using namespace std;


ReaderLabs::ReaderLabs(const char* input, const char* output) {
    this->nombreInput=new char[20];
    strcpy(nombreInput,input);
    this->nombreOutput=new char[20];
    strcpy(nombreOutput,output);
    
    this->encabezado=NULL;
    this->formato=NULL;
    this->archivo=NULL;
}

ReaderLabs::ReaderLabs() {
    this->archivo=NULL;
    this->encabezado=NULL;
    this->formato=NULL;
    this->nombreInput=NULL;
    this->nombreOutput=NULL;
}

ReaderLabs::ReaderLabs(const char* input, const char* output, const char* format){
    this->nombreInput=new char[20];
    strcpy(nombreInput,input);
    this->nombreOutput=new char[20];
    strcpy(nombreOutput,output);
    this->formato=new char[50];
    strcpy(formato,format);
    
    this->archivo=NULL;
    this->encabezado=NULL;
}

ReaderLabs::ReaderLabs(const char * input, const char * output, const char* format, const char* header){
    this->nombreInput=new char[20];
    strcpy(nombreInput,input);
    this->nombreOutput=new char[20];
    strcpy(nombreOutput,output);
    this->formato=new char[50];
    strcpy(formato,format);
    this->encabezado=new char[500];
    strcpy(encabezado,header);
    
    this->archivo=NULL;

}

ReaderLabs::~ReaderLabs() {
    delete nombreInput;
    nombreInput=NULL;
    delete nombreOutput;
    nombreOutput=NULL;
    delete encabezado;
    encabezado=NULL;
}

void ReaderLabs::setEncabezado(const char* header){
    //Borro encabezado de ser neceario
    //
    if(encabezado!=NULL)
    {
        delete encabezado;
        encabezado=NULL;
    }
    encabezado=new char[500];
    strcpy(encabezado,header);
}

void ReaderLabs::setArchivoInput(const char* inputF){
    //Borro nombreInput de ser neceario
    //
    if(nombreInput!=NULL)
    {
        delete nombreInput;
        nombreInput=NULL;
    }
    nombreInput=new char[100];
    strcpy(nombreInput,inputF);
}

void ReaderLabs::setArchivoOutput(const char* outputF){
    //Borro nombreOutput de ser neceario
    //
    if(nombreOutput!=NULL)
    {
        delete nombreOutput;
        nombreOutput=NULL;
    }
    nombreOutput=new char[100];
    strcpy(nombreOutput,outputF);

}

void ReaderLabs::setFormato(const char* format){
    //Borro formato de ser neceario
    //
    if(formato!=NULL)
    {
        delete formato;
        formato=NULL;
    }
    formato=new char[100];
    strcpy(formato,format);
}

void ReaderLabs::abrir(const char * tipoOp){
    string tipoOpera=tipoOp;
    if(tipoOpera=="input")archivo=fopen((const char *)nombreInput, "w+");
    else archivo=fopen((const char *)nombreOutput, "w+");
}

void ReaderLabs::cerrar(){
    fclose(archivo);
}

void ReaderLabs::escribir(const char * estructura, ... ){
    int nParams=0;
    int ultimoLugar=0;
    string cadena=estructura;
    //Cuento los parametros que voy a pedir
//    while(cadena.find("%",ultimoLugar)!=string::npos)
//    {
//        ultimoLugar=cadena.find("%",ultimoLugar)+1;
//        nParams++;
//    }
    va_list ap;
    va_start(ap, estructura);
    if(ap!=NULL)vfprintf(archivo, estructura, ap);
    va_end(ap);
}

char * ReaderLabs::getNameFile(const char * tipoFile){
    string tipo=tipoFile;
    char * ptrName=NULL;
    if(tipo=="Input")ptrName=this->nombreInput;
    else ptrName=this->nombreOutput;
    
    return ptrName;
}

//void ReaderLabs::leer(){}